# def outer():
#     message = 'Hello'
#
#     def inner():
#         print(message)  # inner 函数可以访问 outer 函数中定义的变量 message
#     return inner  # 返回内部函数 inner
#
#
# ret = outer()  # 调用outer 函数，并将其返回的嵌套函数 inner 赋值给变量 ret
# # 由于 outer 函数返回 inner 函数而不是执行它，因此 ret 现在引用 inner 函数本身，而不是 inner 函数的结果。
# ret()  # 因此，您可以稍后调用 ret()，以便在内部打印 message

#
# def outer():
#     a = 10
#
#     def inner():
#         nonlocal a  # nonlocal 关键字声明了 a，以便在函数内部修改外部变量 a 的值。
#         a = a + 1
#         return a
#
#     return inner
#
#
# ret = outer()  # 将 inner() 函数作为闭包赋值给变量 ret。
# r1 = ret()  # 调用闭包函数 ret，这会增加 a 的值并返回新的值给 r1
# print(r1)
# # 闭包的好处就在于可以随心所欲地调用闭包函数，调整其中的局部变量值
# # 即使过了一万行还可以通过ret()调用闭包函数
# r2 = ret()
# print(r2)


def func1():
    print("我是函数1")


def func2():
    print("我是函数2")


func1 = func2
func1()
